"""
练习 8.1：消息 编写⼀个名为 display_message() 的函数，让它
打印⼀个句⼦，指出本章的主题是什么。调⽤这个函数，确认显⽰的
消息正确⽆误。
代码部分：
def display_message():
    print('The theme of this chapter is function。')
display_message()
"""
from importlib.metadata import distribution
from types import new_class

from pyexpat.errors import messages

"""
练习 8.2：喜欢的书 编写⼀个名为 favorite_book() 的函数，其
中包含⼀个名为 title 的形参。让这个函数打印⼀条像下⾯这样的消
息。
One of my favorite books is Alice in Wonderland.
调⽤这个函数，并将⼀本书的书名作为实参传递给它。
代码部分：
def favorite_book(title):
    print(f'One of my favorite books is {title} in Wonderland.')
favorite_book('白夜行')
"""


"""
练习 8.3：T 恤 编写⼀个名为 make_shirt() 的函数，它接受⼀个
尺码以及要印到 T 恤上的字样。这个函数应该打印⼀个句⼦，简要地
说明 T 恤的尺码和字样。
代码部分：
def make_shirt(size,title):
    print(f'This shirt is {size} size with {title}.')
make_shirt('XL' , 'micky mouse picture')
make_shirt(size='XXL',title='FUCK YOU')
"""


"""
练习 8.4：⼤号 T 恤 修改 make_shirt() 函数，使其在默认情况下
制作⼀件印有
“I love Python”字样的⼤号 T 恤。调⽤这个函数分别制作⼀件印有默认
字样的⼤号 T 恤，⼀件印有默认字样的中号 T 恤，以及⼀件印有其他
字样的 T 恤（尺码⽆关紧要）。
代码部分：
def make_shirt(size,title='I love Python'):
    print(f'Making a {size} size shirt with {title}.')
make_shirt('XL')
make_shirt('L')
make_shirt(size='S',title='FUCK YOU')
"""


"""
练习 8.5：城市 编写⼀个名为 describe_city() 的函数，它接受
⼀座城市的名字以及该城市所属的国家。这个函数应该打印⼀个像下
⾯这样简单的句⼦。
Reykjavik is in Iceland.
给⽤于存储国家的形参指定默认值。为三座不同的城市调⽤这个函
数，其中⾄少有⼀座城市不属于默认的国家。
代码部分：
def describe_city(city_name,country_name='CHINA'):
    print(f'{city_name} is in {country_name}.')
describe_city('BeiJing')
describe_city('ShangHai')
describe_city(city_name='NEW_YORK',country_name='AMERICA')
"""


"""
练习 8.6：城市名 编写⼀个名为 city_country() 的函数，它接受
城市的名称及其所属的国家。这个函数应返回⼀个格式类似于下⾯的
字符串：
"Santiago, Chile" 
代码部分：
def city_country(name,country) :
    #information = {'city_name' : name,'country_name' : country}
    information = [name, country]
    return information
message = city_country('Santiago', 'Chile')
print(message)
"""


"""
练习 8.7：专辑 编写⼀个名为 make_album() 的函数，它创建⼀个
描述⾳乐专辑的字典。这个函数应接受歌⼿名和专辑名，并返回⼀个
包含这两项信息的字典。使⽤这个函数创建三个表⽰不同专辑的字
典，并打印每个返回的值，以核实字典正确地存储了专辑的信息。
给 make_album() 函数添加⼀个默认值为 None 的可选形参，以便存
储专辑包含的歌曲数。如果调⽤这个函数时指定了歌曲数，就将这个
值添加到表⽰专辑的字典中。调⽤这个函数，并⾄少在⼀次调⽤中指
定专辑包含的歌曲数。
代码部分：
def make_album(singer_name,album_name,songs_number = 'none') :
    if songs_number == 'none':
        distribution_album = {'singer_name': singer_name, 'album_name': album_name }
    else:
        distribution_album = {'singer_name': singer_name, 'album_name': album_name,'songs_number' : songs_number }
    return distribution_album
album_information1 = make_album('Justin_Bieber','My_World','11')
print(album_information1)
album_information2 = make_album('Justin_Bieber','Juctice','21')
print(album_information2)
album_information3 = make_album('Bruno_Mars','silk_sinic')
print(album_information3)
"""


"""
练习 8.8：⽤户的专辑 在为练习 8.7 编写的程序中，编写⼀个 while
循环，让⽤户输⼊歌⼿名和专辑名。获取这些信息后，使⽤它们来调
⽤ make_album() 函数并将创建的字典打印出来。在这个 while 循
环中，务必提供退出途径。
代码部分：
def make_album(singer_name,album_name,songs_number ='') :
    if songs_number == '':
        distribution_album = {'singer_name': singer_name, 'album_name': album_name }
    else:
        distribution_album = {'singer_name': singer_name, 'album_name': album_name,'songs_number' : songs_number }
    return distribution_album
while True :
    singer_name = input('singer_name:')
    if singer_name == 'q':
        break
    else:
        album_name = input('album_name:')
        songs_number = input('songs_number:')
        album_information = make_album(singer_name, album_name, songs_number)
        print(album_information)
"""


"""
练习 8.9：消息 创建⼀个列表，其中包含⼀系列简短的⽂本消息。将
这个列表传递给⼀个名为 show_messages() 的函数，这个函数会打
印列表中的每条⽂本消息。

messages = ['hello','good bye','fuck you','good afternoon']
def show_messages(messages):
    for message in messages :
        print(message)
show_messages(messages)
"""


"""
练习 8.10：发送消息 在为练习 8.9 编写的程序中，编写⼀个名为
send_messages() 的函数，将每条消息都打印出来并移到⼀个名为
sent_messages 的列表中。调⽤ send_messages() 函数，再将两
个列表都打印出来，确认把消息移到了正确的列表中。

messages = ['hello','good bye','fuck you','good afternoon']
new_messages = []
def show_messages(messages):
    for message in messages :
        print(message)
show_messages(messages)
def send_messages(unsend_messages,new_messages):
    while unsend_messages:
        current_message = unsend_messages.pop()
        new_messages.append(current_message)
send_messages(messages,new_messages)
print(f'old messages is : \n{messages}')
print(f'new messages is : \n{new_messages}')
"""


"""
练习 8.11：消息归档 修改为练习 8.10 编写的程序，在调⽤函数
send_messages() 时，向它传递消息列表的副本。调⽤
send_messages() 函数后，将两个列表都打印出来，确认原始列表
保留了所有的消息。

messages = ['hello','good bye','fuck you','good afternoon']
new_messages = []
def show_messages(messages):
    for message in messages :
        print(message)
show_messages(messages)
def send_messages(unsend_messages,new_messages):
    while unsend_messages:
        current_message = unsend_messages.pop()
        new_messages.append(current_message)
send_messages(messages[:],new_messages)
print(f'old messages is : \n{messages}')
print(f'new messages is : \n{new_messages}')
"""


"""
练习 8.12：三明治 编写⼀个函数，它接受顾客要在三明治中添加的
⼀系列⾷材。这个函数只有⼀个形参（它收集函数调⽤中提供的所有
⾷材），并打印⼀条消息，对顾客点的三明治进⾏概述。调⽤这个函
数三次，每次都提供不同数量的实参。

def sandwich(*food_ingredients):
    orders = []
    orders = food_ingredients
    print(f'The sandwich with :{orders}')
sandwich('beaf','meat','chicken')
sandwich('tomat','meat','chicken')
sandwich('beaf')
"""


"""
练习 8.13：⽤户简介 复制前⾯的程序 user_profile.py，在其中调⽤
build_profile() 来创建有关你的简介。在调⽤这个函数时，指定
你的名和姓，以及三个⽤来描述你的键值对。
def build_profile(first, last, **user_info):
    user_info['first_name'] = first
    user_info['last_name'] = last
    return user_info
user_profile = build_profile('方', '宇杰',location='常州',field='software',age='23')
print(user_profile)
"""

"""
练习 8.14：汽⻋ 编写⼀个函数，将⼀辆汽⻋的信息存储在字典中。
这个函数总是接受制造商和型号，还接受任意数量的关键字实参。在
调⽤这个函数时，提供必不可少的信息，以及两个名值对，如颜⾊和
选装配件。这个函数必须能够像下⾯这样调⽤：
car = make_car('subaru', 'outback', color='blue', tow_package=True)
打印返回的字典，确认正确地处理了所有的信息。

def make_car(brand,vehicle_model,**car_info):
    car_info['brand'] = brand
    car_info['vehicle_model'] = vehicle_model
    return car_info

car = make_car('subaru', 'outback', color='blue', tow_package=True)
print(f'Your car\'s information is \n{car}')
"""
